home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / et / src / mark.c < prev    next >
Text File  |  1993-07-08  |  15KB  |  506 lines

  1. #include  "et.h"
  2. NAME  *move_mouse(int *mos_b_p, int *key_b_p, NAME *name_b_p, int pq1_a[], int pq2_a[], int *start_p)/*et*/
  3. {
  4.   int   i, j, x, y, pq_a[4], name_a[4];
  5.   NAME  *name_p;
  6.   
  7.   if (!test_bit(G_f2, f2_MOUSE))
  8.     MOS_setpos(G_mn[mn_LL].p+8, G_mn[mn_LL].q+8);
  9.   while (1) {
  10.     MOS_rdpos(&i, &x, &y);
  11.     if (x < 8)
  12.       x = 8;
  13.     else if (x > 620)
  14.       x = 620;
  15.     else if (y < 1)
  16.       y = 1;
  17.     else if (y > 390)
  18.       y = 390;
  19.     else
  20.       break;
  21.     MOS_setpos(x, y);
  22.   }
  23.   name_p = find_pq(x, y);
  24.   if (!test_bit(G_f2, f2_MOUSE)) {
  25.     _copy_buf(pq2_a, name_p->pq, sizeof(int[4]));
  26.     pq2_a[2] += 8;
  27.     name_b_p = name_p;
  28.   }
  29.   if (!name_p) {
  30.     if (*mos_b_p) {
  31.       name_b_p = NULL;
  32.       if (!test_bit(G_f, f_PUSH) || find_pq(pq2_a[0]+1, pq2_a[1]+1)) {
  33.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  34.         access_page();
  35.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  36.         access_page();
  37.       }
  38.       _copy_buf(pq1_a, pq2_a, sizeof(int[4]));
  39.       copy_window(pq1_a, P_v[v_MOUSE_BUF], 0x14, PEEK);
  40.     }
  41.     if (x-24 < 8)
  42.       pq_a[0] = 8;
  43.     else
  44.       pq_a[0] = x-24;
  45.     if (y-23 < 8)
  46.       pq_a[1] = 8;
  47.     else
  48.       pq_a[1] = y-23;
  49.     if (x+48 > 639)
  50.       pq_a[2] = 639;
  51.     else
  52.       pq_a[2] = x+48;
  53.     if (y+32 > 399)
  54.       pq_a[3] = 399;
  55.     else
  56.       pq_a[3] = y+32;
  57.     if (!*start_p) {
  58.       copy_window(pq1_a, P_v[v_MOUSE_BUF], 0x14, POKE);
  59.       access_page();
  60.       copy_window(pq1_a, P_v[v_MOUSE_BUF], 0x14, POKE);
  61.       copy_window(pq_a, P_v[v_MOUSE_BUF], 0x14, PEEK);
  62.       access_page();
  63.       *start_p = 1;
  64.     }
  65.     copy_window(pq_a, P_v[v_MOUSE_BUF], 0x14, PEEK);
  66.     _copy_buf(pq1_a, pq_a, sizeof(int[4]));
  67.     copy_window(pq_a, P_v[v_KEY_TMP], 0x14, PEEK);
  68.     draw_mouse(pq_a);
  69.     copy_window(pq_a, P_v[v_MOUSE_TMP], 0x14, PEEK);
  70.     copy_window(pq_a, P_v[v_KEY_TMP], 0x14, POKE);
  71.     access_page();
  72.     copy_window(pq_a, P_v[v_MOUSE_TMP], 0x14, POKE);
  73.     access_page();
  74.     *mos_b_p = 0;
  75.   } else {
  76.     *mos_b_p = (name_p->key==_RET || name_p->key==S_RET) ? _RET : name_p->key;
  77.     if (!name_b_p) {
  78.       if (*mos_b_p == _RET)
  79.         _copy_buf(name_a, P_i[i_WIN_RET], sizeof(int[4]));
  80.       else
  81.         _copy_buf(name_a, name_p->pq, sizeof(int[4]));
  82.       name_a[2] += 8;
  83.       copy_window(pq1_a, P_v[v_MOUSE_BUF], 0x14, POKE);
  84.       copy_window(name_a, P_v[v_KEY_BUF], 0x14, PEEK);
  85.       if (*mos_b_p == _RET) {
  86.         paint_ret(0, L_WHT);
  87.         paint_ret(0, H_SYN);
  88.       } else {
  89.         if (name_p->key < ICN_I)
  90.           paint_window(name_p->pq, L_WHT, P_NEG);
  91.         paint_window(name_p->pq, H_SYN, P_NEG);
  92.       }
  93.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, PEEK);
  94.       access_page();
  95.       copy_window(pq1_a, P_v[v_MOUSE_BUF], 0x14, POKE);
  96.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, POKE);
  97.       access_page();
  98.     } else if (!test_bit(G_f2, f2_MOUSE) ||
  99.               (name_p != name_b_p && (*mos_b_p != _RET || *key_b_p != _RET))) {
  100.       if (!test_bit(G_f2, f2_MOUSE)) {
  101.         set_bit(G_f2, f2_MOUSE);
  102.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, PEEK);
  103.       } else if (!test_bit(G_f, f_PUSH) || find_pq(pq2_a[0]+1, pq2_a[1]+1)) {
  104.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  105.         access_page();
  106.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  107.         access_page();
  108.       }
  109.       if (*mos_b_p == _RET)
  110.         _copy_buf(name_a, P_i[i_WIN_RET], sizeof(int[4]));
  111.       else
  112.         _copy_buf(name_a, name_p->pq, sizeof(int[4]));
  113.       name_a[2] += 8;
  114.       copy_window(name_a, P_v[v_MOUSE_TMP], 0x14, PEEK);
  115.       if (*mos_b_p == _RET) {
  116.         paint_ret(0, L_WHT);
  117.         paint_ret(0, H_SYN);
  118.       } else {
  119.         if (name_p->key < ICN_I)
  120.           paint_window(name_p->pq, L_WHT, P_NEG);
  121.         paint_window(name_p->pq, H_SYN, P_NEG);
  122.       }
  123.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, PEEK);
  124.       access_page();
  125.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, POKE);
  126.       if (!test_bit(G_f, f_PUSH) || find_pq(pq2_a[0]+1, pq2_a[1]+1)) {
  127.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  128.         access_page();
  129.         copy_window(pq2_a, P_v[v_KEY_BUF], 0x14, POKE);
  130.         access_page();
  131.       }
  132.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, POKE);
  133.       access_page();
  134.       copy_window(name_a, P_v[v_KEY_TMP], 0x14, POKE);
  135.       _copy_buf(P_v[v_KEY_BUF], P_v[v_MOUSE_TMP], BUF_SIZE * sizeof(unsigned));
  136.       *key_b_p = *mos_b_p;
  137.     }
  138.     if (*mos_b_p == _RET)
  139.       _copy_buf(pq2_a, P_i[i_WIN_RET], sizeof(int[4]));
  140.     else
  141.       _copy_buf(pq2_a, name_p->pq, sizeof(int[4]));
  142.     pq2_a[2] += 8;
  143.     name_b_p = name_p;
  144.     count(1);
  145.   }
  146.   res_bit(G_f, f_PUSH);
  147.   return(name_b_p);
  148. }
  149. void  mark_icn(int file_i)/*et*/
  150. {
  151.   int   pq_a[4];
  152.   int   i, j, k;
  153.   
  154.   if (!file_i)
  155.     i = 1;
  156.   k = 0;
  157.   if (file_i) {
  158.     for (i = 1; i <= file_i; i++) {
  159.       read_icn(i);
  160.       if (test_bit(G_f, f_EE))
  161.         for (j = k = 0; !k && j <= G_nb.key; j++)
  162.           k = instring(i, G_id[j].csr, sizeof(char));
  163.       draw_icn(i, k);
  164.       set_icn_pq(pq_a, i, 0);
  165.       draw_frame4(pq_a, P_SET);
  166.     }
  167.   }
  168. }
  169. void  copy_dot(DOT *Dst, DOT *Src)/*et*/
  170. {
  171.   int   i;
  172.   
  173.   for (i = 0; i < N_LAST_DOT; i++) {
  174.     Dst->rnd[i] = Src->rnd[i];
  175.     Dst->rnd[i] = Src->rnd[i];
  176.   }
  177. }
  178. void  draw_free(int mm)/*et*/
  179. {
  180.   int   i, key_n, free_n, free_i;
  181.   
  182.   if (!mm)
  183.     draw_mode(1, mn_FREE_AREA, L_WHT);
  184.   key_n = nb_key(G_mv);
  185.   G_nb.dev_i = G_nb.mod_i = G_nb.dot_i = 0;
  186.   G_nb.dev = N_LAST_DOT * key_n / MAX_KEY;
  187.   clear_mark(P_dot[dot_FREE_AREA]);
  188.   G_nb.mod = 0;
  189.   mark_dot(P_dot[dot_FREE_AREA], MAX_KEY, 2, 1);
  190.   if (mm && !test_bit(G_f, f_DEMO) && G_nb.current != 16) {
  191.     G_nb.drive = *P_c[c_FILE_REPLAY];
  192.     free_n = _disk_free(0);
  193.     free_i = _disk_free(1);
  194.     G_nb.dev_i = G_nb.mod_i = G_nb.dot_i = 0;
  195.     G_nb.dev = N_LAST_DOT * (free_n - free_i) / free_n;
  196.     clear_mark(P_dot[dot_FREE_SAVE]);
  197.     G_nb.mod = 0;
  198.     mark_dot(P_dot[dot_FREE_SAVE], free_n, 2, 1);
  199.     G_nb.drive = *P_c[c_FILE_BAK];
  200.     free_n = _disk_free(0);
  201.     free_i = _disk_free(1);
  202.     G_nb.dev_i = G_nb.mod_i = G_nb.dot_i = 0;
  203.     G_nb.dev = N_LAST_DOT * (free_n - free_i) / free_n;
  204.     clear_mark(P_dot[dot_FREE_WORK]);
  205.     G_nb.mod = 0;
  206.     mark_dot(P_dot[dot_FREE_WORK], free_n, 2, 1);
  207.   }
  208. }
  209. void  clear_mark(DOT *Dot)/*et*/
  210. {
  211.   int   i;
  212.   
  213.   for (i = 0; i < N_LAST_DOT; i++) {
  214.     Dot->mpq[i].p = 0;
  215.     Dot->mpq[i].q = 0;
  216.   }
  217. }
  218. void  shaff_dot(DOT *Dot)/*et*/
  219. {
  220.   int   i, j, k, *i_p;
  221.   char  *s_p, *c_p;
  222.   
  223.   if (test_bit(G_f, f_RND)) {
  224.     s_p = P_c[c_PATT_FONT];
  225.     for (j = N_LAST_DOT; j; j--)
  226.       *s_p++ = 0;
  227.     s_p = P_c[c_PATT_FONT];
  228.     j = k = 0;
  229.     while (j < N_LAST_DOT) {
  230.       i = rand()*N_LAST_DOT / RAND_MAX + 1;
  231.       if (!i || i > N_LAST_DOT)
  232.         continue;
  233.       c_p = s_p;
  234.       while (*c_p && *c_p != i)
  235.         c_p++;
  236.       if (*c_p)
  237.         continue;
  238.       *c_p = i;
  239.       Dot->rnd[j++] = i - 1;
  240.     }
  241.   } else
  242.     for (i = 0; i < N_LAST_DOT; i++)
  243.       Dot->rnd[i] = i;
  244. }
  245. void  mark_dot(DOT *Dot, int key_n, int mm, int count)/*et*/
  246. {
  247.   int   i, j, k, draw_dots_m;
  248.   
  249.   switch(mm) {
  250.   case 1:
  251.     G_nb.dev_i++;
  252.     if (G_nb.dev_i >= G_nb.dev) {
  253.       G_nb.dev_i -= G_nb.dev;
  254.       G_nb.mod_i += G_nb.mod;
  255.       if (G_nb.mod_i >= N_LAST_DOT) {
  256.         G_nb.mod_i -= N_LAST_DOT;
  257.         G_nb.dev_i--;
  258.       }
  259.       j = Dot->rnd[G_nb.dot_i];
  260.       if (Dot->mpq[j].p)
  261.         if (Dot->mpq[j].q)
  262.           draw_dots_m = 0;
  263.         else
  264.           draw_dots_m = 2;
  265.       else if (Dot->mpq[j].q)
  266.         draw_dots_m = 1;
  267.       else
  268.         draw_dots_m = 3;
  269.       draw_dots(Dot->pq[j].p, Dot->pq[j].q, draw_dots_m, count);
  270.       if (j % (N_LAST_DOT/4))
  271.           Dot->mpq[j-1].p = 1;
  272.         if (j >= N_LAST_DOT/4)
  273.           Dot->mpq[j-N_LAST_DOT/4].q = 1;
  274.       G_nb.dot_i++;
  275.     }
  276.     break;
  277.   case 2:
  278.     G_nb.mod_i += G_nb.mod;
  279.     if (G_nb.mod_i >= key_n) {
  280.       G_nb.mod_i -= key_n;
  281.       G_nb.dev_i = 1;
  282.     } else
  283.       G_nb.dev_i = 0;
  284.     for (k = G_nb.dot_i; G_nb.dot_i < k + G_nb.dev + G_nb.dev_i; G_nb.dot_i++) {
  285.       j = Dot->rnd[G_nb.dot_i];
  286.       if (Dot->mpq[j].p)
  287.         if (Dot->mpq[j].q)
  288.           draw_dots_m = 0;
  289.         else
  290.           draw_dots_m = 2;
  291.       else if (Dot->mpq[j].q)
  292.         draw_dots_m = 1;
  293.       else
  294.         draw_dots_m = 3;
  295.       draw_dots(Dot->pq[j].p, Dot->pq[j].q, draw_dots_m, count);
  296.       if (j % (N_LAST_DOT/4))
  297.         Dot->mpq[j-1].p = 1;
  298.       if (j >= (N_LAST_DOT/4))
  299.         Dot->mpq[j-N_LAST_DOT/4].q = 1;
  300.     }
  301.     break;
  302.   }
  303. }
  304. void  draw_dots(int x, int y, int mm, int j)/*et*/
  305. {
  306.   int   i = j;
  307.   
  308.   while (1) {
  309.     draw_line(x-1,y-1,x+4,y-1,L_WHT, P_SET);
  310.     draw_line(x-1,y-1,x-1,y+3,L_WHT, P_SET);
  311.     switch(mm) {
  312.     case 0:
  313.       break;
  314.     case 1:
  315.       draw_line(x+4,y+2,x+4,y-1,H_WHT, P_RES);
  316.       break;
  317.     case 2:
  318.       draw_line(x-1,y+3,x+4,y+3,H_WHT, P_RES);
  319.       break;
  320.     case 3:
  321.       draw_line(x-1,y+3,x+4,y+3,H_WHT, P_RES);
  322.       draw_line(x+4,y+2,x+4,y-1,H_WHT, P_RES);
  323.       break;
  324.     default:
  325.       break;
  326.     }
  327.     i--;
  328.     if (!i)
  329.       break;
  330.     access_page();
  331.   }
  332.   if (j == 2)
  333.     access_page();
  334. }
  335. void  draw_mode(int mm, int menu_i, int col)/*et*/
  336. {                           /* SWITCH(mm)                                  */
  337.   int   i, len;             /* CASE 0: pull_key() Draw_key() Draw_name()   */
  338.   int   key_len, name_len;  /* CASE 1: push_key() Draw_name()              */
  339.   FILE  *File;              /* CASE 2: pull_key() Draw_key()               */
  340.   VRAM  *vram_p, u;         /* CASE 3: push_key()                          */
  341.   char  *c_p;               /* CASE 4: Draw_key()                          */
  342.                             /* CASE 5: Draw_name()                         */
  343.   switch(mm) {              /* CASE 6: pull_key()                          */
  344.   case 0:                   /* CASE 7: Draw_name() ... for draw_name()     */
  345.     mark_key(mm, menu_i);   /* CASE 8: Draw_name() ... for draw_name()     */
  346.     c_p = G_mn[menu_i].font;/* CASE 9: push_key() Draw_key()               */
  347.     len = strlen(G_mn[menu_i].s);
  348.     key_len = G_mn[menu_i].len;
  349.     name_len = len - key_len;
  350.     break;
  351.   case 1:
  352.   case 5:
  353.   case 7:
  354.   case 8:
  355.     c_p = G_mn[menu_i].font + G_mn[menu_i].len * 16;
  356.     len = strlen(G_mn[menu_i].s) - G_mn[menu_i].len;
  357.     key_len = 0;
  358.     name_len = len;
  359.     break;
  360.   case 9:
  361.   case 2:
  362.     mark_key((mm==2) ? mm : 1, menu_i);
  363.   case 4:
  364.     c_p = G_mn[menu_i].font;
  365.     len = G_mn[menu_i].len;
  366.     key_len = len;
  367.     name_len = 0;
  368.     break;
  369.   case 3:
  370.   case 6:
  371.     mark_key(mm, menu_i);
  372.     return;
  373.     break;
  374.   }
  375.                                         /* Draw_key() *//*et*/
  376.   for (i = 0; i < key_len; i++) {
  377.     vram_p = vram_addr(G_mn[menu_i].p + i * 8, G_mn[menu_i].q, !G_nb.page);
  378.     draw_name(&c_p, &vram_p, mm, col);
  379.   }
  380.   if (!mm)
  381.     mm = 5;
  382.                                         /* Draw_name() *//*et*/
  383.   for (i = 0; i < name_len; i++) {
  384.     vram_p = vram_addr(G_mn[menu_i].p + (i + G_mn[menu_i].len) * 8, 
  385.                        G_mn[menu_i].q, !G_nb.page);
  386.     draw_name(&c_p, &vram_p, mm, col);
  387.   }
  388.   if (mm == 1)
  389.     mark_key(mm, menu_i);
  390. }
  391. void  mark_key(int mm, int menu_i)/*et*/
  392. {
  393.   switch(menu_i) {
  394.   case mn_UP:
  395.   case mn_LT:
  396.   case mn_FR:
  397.     draw_key(G_mn[menu_i].p+5*8-1-1, G_mn[menu_i].q-1, 
  398.              G_mn[menu_i].p+9*8+2+1-1, G_mn[menu_i].q+17, mm);
  399.     draw_key(G_mn[menu_i].p-1-1, G_mn[menu_i].q-1, 
  400.              G_mn[menu_i].p+4*8+2+1-1, G_mn[menu_i].q+17, mm);
  401.     break;
  402.   case mn_S_UP:
  403.   case mn_S_LT:
  404.   case mn_S_FR:
  405.     draw_key(G_mn[menu_i].p+8*8-1-1+4, G_mn[menu_i].q-1, 
  406.              G_mn[menu_i].p+11*8+2+1-1+4, G_mn[menu_i].q+17, mm);
  407.     draw_key(G_mn[menu_i].p+4*8-1-1+4, G_mn[menu_i].q-1, 
  408.              G_mn[menu_i].p+7*8+2+1-1+4, G_mn[menu_i].q+17, mm);
  409.     draw_key(G_mn[menu_i].p-1-1+4, G_mn[menu_i].q-1, 
  410.              G_mn[menu_i].p+3*8+2+1-1+4, G_mn[menu_i].q+17, 1);
  411.     break;
  412.   case mn_C_UP:
  413.   case mn_C_LT:
  414.   case mn_C_FR:
  415.     draw_key(G_mn[menu_i].p+7*8-1-1+4, G_mn[menu_i].q-1, 
  416.              G_mn[menu_i].p+10*8+2+1-1+4, G_mn[menu_i].q+17, mm);
  417.     draw_key(G_mn[menu_i].p+3*8-1-1+4, G_mn[menu_i].q-1, 
  418.              G_mn[menu_i].p+6*8+2+1-1+4, G_mn[menu_i].q+17, mm);
  419.     draw_key(G_mn[menu_i].p-1-1+4, G_mn[menu_i].q-1, 
  420.              G_mn[menu_i].p+2*8+2+1-1+4, G_mn[menu_i].q+17, 1);
  421.     break;
  422.   case mn_C_DN:
  423.   case mn_C_RT:
  424.   case mn_C_BK:
  425.   case mn_S_DN:
  426.   case mn_S_RT:
  427.   case mn_S_BK:
  428.     draw_key(G_mn[menu_i].p-2+4, G_mn[menu_i].q-1, 
  429.              G_mn[menu_i].p+G_mn[menu_i].len*8+2+4, G_mn[menu_i].q+17, mm);
  430.     break;
  431.   case mn_RET:
  432.     draw_ret(mm);
  433.   case mn_S_RET:
  434.     break;
  435.   case mn_LOGO:
  436.     draw_key(G_mn[menu_i].p-2,G_mn[menu_i].q-1-5, 
  437.              G_mn[menu_i].p+G_mn[menu_i].len*8+2, G_mn[menu_i].q+24-5, mm);
  438.     break;
  439.   case mn_ERR:
  440.   case mn_ERR_1:
  441.   case mn_ERR_2:
  442.   case mn_ERR_3:
  443.   case mn_ERR_4:
  444.     draw_key(G_mn[menu_i].p-2,G_mn[menu_i].q-3, 
  445.              G_mn[menu_i].p+G_mn[menu_i].len*8+2, G_mn[menu_i].q+18, mm);
  446.     break;
  447.   case mn_FF:
  448.     draw_key(G_mn[menu_i].p-2,G_mn[menu_i].q-1, 
  449.              G_mn[menu_i].p+G_mn[menu_i].len*8, G_mn[menu_i].q+17, mm);
  450.     break;
  451.   case mn_RND:
  452.   case mn_POS:
  453.     draw_key(G_mn[menu_i].p-2,G_mn[menu_i].q-1, 
  454.              G_mn[menu_i].p+G_mn[menu_i].len*8-1, G_mn[menu_i].q+17, mm);
  455.     break;
  456.   default:
  457.     draw_key(G_mn[menu_i].p-2, G_mn[menu_i].q-1, 
  458.              G_mn[menu_i].p+G_mn[menu_i].len*8+2, G_mn[menu_i].q+17, mm);
  459.     break;
  460.   }
  461. }
  462. void  set_trace_mode(int mm)/*et*/
  463. {
  464.   int   pq_a[4];
  465.   
  466.   set_name_pq(mn_TAB, pq_a);
  467.   paint_window(pq_a, H_WHT, P_RES);
  468.   switch(mm) {
  469.   case f_AA:
  470.     draw_mode(5, mn_TAB, H_WHT);
  471.     break;
  472.   case f_NN:
  473.     draw_mode(5, mn_TAB, H_YEL);
  474.     break;
  475.   default:
  476.     draw_mode(5, mn_TAB, H_GRN);
  477.     break;
  478.   }
  479. }
  480. void  mark_tab()/*et*/
  481. {
  482.   int   pq_a[4];
  483.   
  484.   if (!test_bit(G_f, f_BAR))
  485.     if (!test_bit(G_f, f_TROFF))
  486.       set_trace_mode(test_bit(G_f, f_AA|f_NN));
  487.     else {
  488.       set_name_pq(mn_TAB, pq_a);
  489.       paint_window(pq_a, H_WHT, P_RES);
  490.       draw_mode(5, mn_TAB, L_WHT);
  491.     }
  492. }
  493. void  mark_rev()/*et*/
  494. {
  495.   int   pq_a[4];
  496.   
  497.   if (!test_bit(G_f, f_BAR)) {
  498.     set_name_pq(mn_INS, pq_a);
  499.     paint_window(pq_a, H_WHT, P_RES);
  500.     if (!test_bit(G_f, f_REV))
  501.       draw_mode(5, mn_INS, H_RED);
  502.     else
  503.       draw_mode(5, mn_INS, L_WHT);
  504.   }
  505. }
  506.